package com.myblog.secondjavaproject;
//Scanner sc = new Scanner(System.in)是用了一个不在当前包中的类，所以需要导包
//import java.util.Scanner;


//static 静态属性，类属性   类名.getX()
//设计一个类，创建的对象永远只有一份(单例模式)
class A {
    //int y;
    static int x=1;//不加static属于对象属性，加了static后变成类属性，共享x这块内存，并且可以直接用类名.X使用，不用创建对象

    static{//静态代码块，并不是一个方法，只要加载遇到这个类就会加载，方法是调用的时候才会执行
        x++;
        System.out.println("x0="+x);
    }

    A() {  //构造方法A()，只有在创建对象的时候才执行
    x++;
    System.out.println("x1="+x);
    }

    static int getX() { //对象方法变成了类方法,可以直接用类名.getX()调用，不用创建对象
        return x;
        //return y;//错误，因为静态方法不能访问非静态成员

    }

}

public class test {

    public static void main(String[] args) {
        Rectangle r1 = new Rectangle();
        Rectangle r2 = new Rectangle(3,4);
        if(r1.area(1,1) > r2.area(3,4)) {//为什么area括号里面不加参数会报错呢？老师的都没有报错
            System.out.println(r1.getLength()+","+r1.getWidth());
        }else{
            System.out.println(r2.getLength()+","+r2.getWidth());
        }

        //知识点:Scanner sc;//这个Scanner类不在当前包中，所以需要导一个工具包
        //那么System.out.println(),System也是一个类，也不在当前定义的包类，为什么它不用导报呢
        //因为这个类的包是通过import java.lang.*;//语言包自动导入


        //设置Single构造函数为私有的,禁止创建类Single的对象
        /*
        Single s1=new Single();
        Single s2=new Single();
        Single s3=new Single();
        */
        /*
        Single.getList();//最终实现了无论调用多少次都是只创建了一个对象
        Single.getList();
        Single.getList();
        System.out.println(Single.count);
        */

        /*
        A a = new A();//x=1
        System.out.println(a.getX());//x=1
        A b = new A();//x=2
        System.out.println(a.getX());//x=2
        System.out.println(b.getX());//x=2
        A c = new A();//x=3
        System.out.println(a.getX());//x=3
        System.out.println(b.getX());//x=3
        System.out.println(c.getX());//x=3
        */
        //A.getX();
        //System.out.println(A.getX());
        //A a = new A();
        //int b=a.getX();
        //System.out.println(b);
}
}
